package com.fabiodocarmo.calendario.beans;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

/**
 * Classe com informações sobre o dia do ano que representa.
 * @author Taciano Morais Silva - tacianosilva@gmail.com
 * @version 05/03/2009, 18h02m
 * @since 04/03/2009, 18h02m
 */
public class Dia {

    public final static String FORMATO_SIMPLES = "dd/MM/yyyy";

    private GregorianCalendar data;


    /**
     * Constrói uma data representando a data atual do sistema.
     */
    public Dia() {
        this.data = new GregorianCalendar();
    }

    /**
     * Constrói uma data a partir do dia do mês (1 a 31), mês (0 a 11) e ano.
     * @param diaMes Dia do mês.
     * @param mes Mês do ano, começando com Janeiro igual a zero.
     * @param ano Ano da data.
     */
    public Dia(int diaMes, int mes, int ano) {
        this.data = new GregorianCalendar(ano, mes, diaMes);
    }

    public Dia(Date data) {
        this.data = new GregorianCalendar();
        this.data.setTime(data);
    }

    public int getDiaDaSemana() {
        return getData().get(Calendar.DAY_OF_WEEK);
    }

    public int getDiaDoAno() {
        return getData().get(Calendar.DAY_OF_YEAR);
    }

    public int getSemanaDoMes() {
        return getData().get(Calendar.WEEK_OF_MONTH);
    }

    public int getSemanaDoAno() {
        return getData().get(Calendar.WEEK_OF_YEAR);
    }

    public boolean isBissexto() {
        GregorianCalendar fev = new GregorianCalendar(getData().get(Calendar.YEAR),Calendar.FEBRUARY, 1);
        int ultimoDia = fev.getActualMaximum(Calendar.DAY_OF_MONTH);
        return ultimoDia == 29;
    }

    public int getDiasRestantesAno() {
        if (isBissexto()) {
            return 366 - getDiaDoAno();
        }
        return 365 - getDiaDoAno();
    }

    public GregorianCalendar getData() {
        return data;
    }

    public void setData(GregorianCalendar data) {
        this.data = data;
    }

    @Override
    public String toString() {
        SimpleDateFormat formato = new SimpleDateFormat(FORMATO_SIMPLES);
        return formato.format(getData().getTime());
    }

	public int getDiaDoMes() {
		return data.get(Calendar.DAY_OF_MONTH);
	}

	public int getMes() {
		return data.get(Calendar.MONTH);
	}

	public int getAno() {
		return data.get(Calendar.YEAR);
	}
}
